#include <stdio.h>
#include <stdlib.h>

#include "rb-tree.h"
#include "util.h"
#include "redblack.h"

int main(int argc, char **argv) {

   FILE *fp;
   treenode_t *head=NULL, *rmv;
   char buffer[BUFFER+1], letter;
   int value, retval;

   // Tenta abrir arquivo se foi fornecido como parametro de execucao ou senao usa stdin
   if(argc != 1) {

      fp = fopen(argv[1], "r");
      if(fp == NULL) {
         fprintf(stderr, "Impossivel abrir '%s' para leitura\n", argv[1]);
         exit(1);
      }

   } else fp = stdin;

   /* Enquanto nao chega ao fim do arquivo ou da entrada padrao (Ctrl - D) */
   while(fgets(buffer, BUFFER, fp) != NULL) {

      letter = entry_proc(buffer, &value);
      switch(letter) {

         case 'b':
            printf("Procurar %d\n", value);
            rb_search(head, value, VERBOSE);
            printf("\n");
            break;

         case 'i':
            printf("Inserir %d\n", value);
            retval = rb_insert(&head, value);
            rb_search(head, value, VERBOSE);
            printf("\n");
            break;

         case 'r':
            printf("Remover %d\n", value);
            rmv = rb_remove(&head, value);
            if(rmv == head) {
               if(rmv != NULL) free(rmv);
               head = NULL;
            } else if(rmv != NULL) free(rmv);
            rb_search(head, value, VERBOSE);
            printf("\n");
            break;

         default:
            printf("Comando desconhecido\n");
            break;

      }

   }

   return 0;

}
